home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / _MozillaCookieJar.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  5KB  |  143 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''Mozilla / Netscape cookie loading / saving.'''
  5. import re
  6. import time
  7. import logging
  8. from cookielib import reraise_unmasked_exceptions, FileCookieJar, Cookie, MISSING_FILENAME_TEXT
  9.  
  10. class MozillaCookieJar(FileCookieJar):
  11.     """
  12.  
  13.     WARNING: you may want to backup your browser's cookies file if you use
  14.     this class to save cookies.  I *think* it works, but there have been
  15.     bugs in the past!
  16.  
  17.     This class differs from CookieJar only in the format it uses to save and
  18.     load cookies to and from a file.  This class uses the Mozilla/Netscape
  19.     `cookies.txt' format.  lynx uses this file format, too.
  20.  
  21.     Don't expect cookies saved while the browser is running to be noticed by
  22.     the browser (in fact, Mozilla on unix will overwrite your saved cookies if
  23.     you change them on disk while it's running; on Windows, you probably can't
  24.     save at all while the browser is running).
  25.  
  26.     Note that the Mozilla/Netscape format will downgrade RFC2965 cookies to
  27.     Netscape cookies on saving.
  28.  
  29.     In particular, the cookie version and port number information is lost,
  30.     together with information about whether or not Path, Port and Discard were
  31.     specified by the Set-Cookie2 (or Set-Cookie) header, and whether or not the
  32.     domain as set in the HTTP header started with a dot (yes, I'm aware some
  33.     domains in Netscape files start with a dot and some don't -- trust me, you
  34.     really don't want to know any more about this).
  35.  
  36.     Note that though Mozilla and Netscape use the same format, they use
  37.     slightly different headers.  The class saves cookies using the Netscape
  38.     header by default (Mozilla can cope with that).
  39.  
  40.     """
  41.     magic_re = '#( Netscape)? HTTP Cookie File'
  42.     header = '    # Netscape HTTP Cookie File\n    # http://www.netscape.com/newsref/std/cookie_spec.html\n    # This is a generated file!  Do not edit.\n\n'
  43.     
  44.     def _really_load(self, f, filename, ignore_discard, ignore_expires):
  45.         now = time.time()
  46.         magic = f.readline()
  47.         if not re.search(self.magic_re, magic):
  48.             f.close()
  49.             raise IOError('%s does not look like a Netscape format cookies file' % filename)
  50.         
  51.         
  52.         try:
  53.             while None:
  54.                 line = f.readline()
  55.                 if line == '':
  56.                     break
  57.                 
  58.                 if line.endswith('\n'):
  59.                     line = line[:-1]
  60.                 
  61.                 if line.strip().startswith('#') and line.strip().startswith('$') or line.strip() == '':
  62.                     continue
  63.                 
  64.                 (domain, domain_specified, path, secure, expires, name, value) = line.split('\t')
  65.                 secure = secure == 'TRUE'
  66.                 domain_specified = domain_specified == 'TRUE'
  67.                 if name == '':
  68.                     name = value
  69.                     value = None
  70.                 
  71.                 initial_dot = domain.startswith('.')
  72.                 if not domain_specified == initial_dot:
  73.                     raise AssertionError
  74.                 discard = False
  75.                 if expires == '':
  76.                     expires = None
  77.                     discard = True
  78.                 
  79.                 c = Cookie(0, name, value, None, False, domain, domain_specified, initial_dot, path, False, secure, expires, discard, None, None, { })
  80.                 if not ignore_discard and c.discard:
  81.                     continue
  82.                 
  83.                 if not ignore_expires and c.is_expired(now):
  84.                     continue
  85.                 
  86.                 self.set_cookie(c)
  87.         except:
  88.             reraise_unmasked_exceptions((IOError,))
  89.             raise IOError('invalid Netscape format file %s: %s' % (filename, line))
  90.  
  91.  
  92.     
  93.     def save(self, filename = None, ignore_discard = False, ignore_expires = False):
  94.         if filename is None:
  95.             if self.filename is not None:
  96.                 filename = self.filename
  97.             else:
  98.                 raise ValueError(MISSING_FILENAME_TEXT)
  99.         
  100.         f = open(filename, 'w')
  101.         
  102.         try:
  103.             f.write(self.header)
  104.             now = time.time()
  105.             for cookie in self:
  106.                 if not ignore_discard and cookie.discard:
  107.                     continue
  108.                 
  109.                 if not ignore_expires and cookie.is_expired(now):
  110.                     continue
  111.                 
  112.                 if cookie.secure:
  113.                     secure = 'TRUE'
  114.                 else:
  115.                     secure = 'FALSE'
  116.                 if cookie.domain.startswith('.'):
  117.                     initial_dot = 'TRUE'
  118.                 else:
  119.                     initial_dot = 'FALSE'
  120.                 if cookie.expires is not None:
  121.                     expires = str(cookie.expires)
  122.                 else:
  123.                     expires = ''
  124.                 if cookie.value is None:
  125.                     name = ''
  126.                     value = cookie.name
  127.                 else:
  128.                     name = cookie.name
  129.                     value = cookie.value
  130.                 f.write('\t'.join([
  131.                     cookie.domain,
  132.                     initial_dot,
  133.                     cookie.path,
  134.                     secure,
  135.                     expires,
  136.                     name,
  137.                     value]) + '\n')
  138.         finally:
  139.             f.close()
  140.  
  141.  
  142.  
  143.